home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / MATH / MATH1 / TRAPEZ.LIB < prev    next >
Text File  |  1985-04-03  |  1KB  |  43 lines

  1.  
  2.  
  3. { -> 270 }
  4. procedure trapez(function f(x:real):real;
  5.         lower,upper,tol: real;
  6.         var sum        : real);
  7.  
  8. { numerical integration by the trapezoid method }
  9. { function is f (as parameter), limits are LOWER and UPPER }
  10. { with number of regions equal to PIECES }
  11. { fixed partition is DELTA_X, answer is SUM }
  12.  
  13. var    pieces,i            : integer;
  14.     x,delta_x,end_sum,mid_sum,
  15.     end_cor,sum1            : real;
  16.  
  17. function dfx(x: real): real;
  18. begin
  19.   dfx:=1.0/sqr(x)
  20. end;
  21.  
  22. begin
  23.   pieces:=1;
  24.   delta_x:=(upper-lower)/pieces;
  25.   end_sum:=f(lower)+f(upper);
  26.   end_cor:=(dfx(upper)-dfx(lower))/12.0;
  27.   sum:=end_sum*delta_x/2.0;
  28.   mid_sum:=0.0;
  29.   repeat
  30.     pieces:=pieces*2;
  31.     sum1:=sum;
  32.     delta_x:=(upper-lower)/pieces;
  33.     for i:=1 to pieces div 2 do
  34.     begin
  35.       x:=lower+delta_x*(2.0*i-1.0);
  36.       mid_sum:=mid_sum+f(x)
  37.     end;
  38.   sum:=(end_sum+2.0*mid_sum)*delta_x*0.5*0.5-sqr(delta_x)*end_cor;
  39.   until abs(sum-sum1)<=abs(tol*sum)
  40. end;        { TRAPEZ }
  41.  
  42.  
  43.